package com.chaopei.xmljson_parse;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * @author adai
 * @date 2019年5月11日
 */
public class Dom4jParse {
	public static void go() {// dom4j解析,建议用此种方式
		ArrayList<Book> list = new ArrayList<Book>();
		SAXReader reader = new SAXReader();
		try {
			// 获取dom4j中的文档对象
			Document dc = reader.read("src/books.xml");
			// 获取根节点bookstore
			Element bookstore = dc.getRootElement();
			// 获取迭代器,其中包含了所有子元素的集合
			Iterator<Element> it = bookstore.elementIterator();
			// 遍历迭代器,获取根节点中的信息
			while (it.hasNext()) {
				Element book = (Element) it.next();
				//// (1) 获取book的属性名及属性值
				List<Attribute> bookAttrs = book.attributes();
				for (Attribute attr : bookAttrs) {
					System.out.println("***属性名:" + attr.getName() + " 属性值:" + attr.getValue() + "***");
				} // for
					//// (2)遍历book中的子元素(子节点)////
					// 获取book中的子元素集合迭代器
				Iterator<Element> itt = book.elementIterator();
				Book bk = new Book();
				while (itt.hasNext()) {
					Element el = itt.next();
					System.out.println("节点名:" + el.getName() + " 节点值:" + el.getStringValue());
					//// 可以将解析出的数据存入list集合,然后可持久化哦
					if (el.getName().equals("name")) {
						bk.setName(el.getStringValue());
					} else if (el.getName().equals("author")) {
						bk.setAuthor(el.getStringValue());
					} else if (el.getName().equals("year")) {
						bk.setYear(Integer.valueOf(el.getStringValue()));
					} else if (el.getName().equals("price")) {
						bk.setPrice(Double.valueOf(el.getStringValue()));
					}
				} // while1
				list.add(bk);
			} // while2
				///// 增强型for遍历集合/////
			System.out.println("------------------------");
			for (Book b : list) {
				System.out.println(b.getName() + ":" + b.getAuthor() + ":" + b.getYear() + ":" + b.getPrice());
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
